简体中文 | English
Qwen1.5-4B 训练的硬件配置:
硬件 | 配置 |
---|---|
NPU | 8 x Ascend NPUs |
克隆仓库到本地服务器
git clone https://gitee.com/ascend/ModelLink.git
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
git checkout -f bcce6f
cp -r megatron ../ModelLink/
cd ..
cd ModelLink
mkdir logs
mkdir model_from_hf
mkdir dataset
mkdir ckpt
搭建环境
# python3.8
conda create -n test python=3.8
conda activate test
# 安装 torch 和 torch_npu
pip install torch-2.2.0-cp38-cp38m-manylinux2014_aarch64.whl
pip install torch_npu-2.2.0*-cp38-cp38m-linux_aarch64.whl
pip install apex-0.1_ascend*-cp38-cp38m-linux_aarch64.whl
# 修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 安装加速库
git clone https://gitee.com/ascend/AscendSpeed.git
cd AscendSpeed
git checkout 224ae35e8fc96778f957029d1371ddb623452a50
pip install -r requirements.txt
pip3 install -e .
cd ..
# 安装其余依赖库
pip install -r requirements.txt
下载 Qwen1.5-4B 的 预训练权重和词表
#!/bin/bash
mkdir ./model_from_hf/qwen15-4b-hf/
cd ./model_from_hf/qwen15-4b-hf/
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/config.json
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/generation_config.json
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/merges.txt
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/model-00001-of-00002.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/model-00002-of-00002.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/model.safetensors.index.json
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/tokenizer.json
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/tokenizer_config.json
wget https://huggingface.co/Qwen/Qwen1.5-4B/resolve/main/vocab.json
cd ../../
权重转换
4.1 将权重从 huggingface 格式转化为 magatron 格式 (该场景一般用于使能开源的HuggingFace模型在Megatron上进行训练)
# 修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 权重格式转换
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader llama2_hf \
--saver megatron \
--target-tensor-parallel-size 1 \
--target-pipeline-parallel-size 2 \
--params-dtype bf16 \
--add-qkv-bias \
--load-dir ./model_from_hf/qwen15-4b-hf/ \
--save-dir ./model_weights/qwen15-4b-hf-v0.1-tp1-pp2/ \
--tokenizer-model ./model_from_hf/qwen15-4b-hf/tokenizer.json
4.2 任意并行切分策略的 Megatron 权重 格式转化为 HuggingFace权重 (该场景一般用于将训练好的megatron模型重新转回HuggingFace格式)
# 请按照您的真实环境修改 set_env.sh 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader megatron \
--saver megatron \
--save-model-type save_huggingface_llama \
--load-dir ./ckpt/ \
--target-tensor-parallel-size 1 \
--target-pipeline-parallel-size 1 \
--add-qkv-bias \
--save-dir ./model_from_hf/qwen15-4b-hf/ # <-- 需要填入原始HF模型路径,新权重会存于./model_from_hf/qwen15-4b-hf/mg2hg/
权重转换适用于预训练、微调、推理和评估,根据任务不同调整参数 target-tensor-parallel-size
和 target-pipeline-parallel-size
。
预训练
5.1 准备数据集
下载 Qwen1.5-4B 数据集
# 下载数据
cd ./dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理数据
mkdir ./dataset/qwen15-4b-hf/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/qwen15-4b-hf/ \
--output-prefix ./dataset/qwen15-4b-hf/alpaca \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF
5.2 预训练
# 设置 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 根据实际情况配置词表、数据集、模型参数保存路径
CKPT_SAVE_DIR="./ckpt/qwen15-4b-hf/"
TOKENIZER_PATH="./model_from_hf/qwen15-4b-hf" #词表路径
DATA_PATH="./dataset/qwen15-4b-hf/alpaca_text_document" #数据集路径
CKPT_LOAD_DIR="./model_weights/qwen15-4b-hf-v0.1-tp1-pp2"
启动 Qwen1.5-4B 预训练脚本: examples/qwen15/pretrain_qwen15_4b_ptd.sh
微调
6.1 准备微调数据集 下载微调数据集 这里
# 下载数据集
mkdir finetune_dataset
cd ./finetune_dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理微调数据集
mkdir ./finetune_dataset/qwen15-4b-hf/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/qwen15-4b-hf/ \
--output-prefix ./finetune_dataset/qwen15-4b-hf/alpaca \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF \
--handler-name GeneralInstructionHandler \
--append-eod
6.2 全参微调 全参微调的配置脚本基本和预训练脚本一致. 区别是数据集,以及增加训练参数--is-instruction-dataset
增加微调参数--finetune,参数如下:
DATA_PATH="./finetune_dataset/qwen15-4b-hf/alpaca"
TOKENIZER_PATH="./model_from_hf/qwen15-4b-hf/"
CKPT_PATH="./model_weights/qwen15-4b-hf-v0.1-tp1-pp2/"
--load ${CKPT_PATH} \
--finetune \
--is-instruction-dataset \
--tokenizer-type PretrainedFromHF \
--tokenizer-name-or-path ${TOKENIZER_PATH} \
--tokenizer-not-use-fast \
Qwen1.5-4B 在 昇腾芯片 和 参考芯片 上的性能对比:
设备 | 模型 | 迭代数 | tokens吞吐 (tokens/s/p) |
---|---|---|---|
NPUs | Qwen1.5-4B | 1000 | 5033 |
参考 | Qwen1.5-4B | 1000 | 5328 |
配置Qwen1.5-4B 推理脚本: examples/qwen1.5/generate_qwen1.5_4b_ptd.sh
# 根据您自己的 ascend-toolkit 路径,执行set_env.sh
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型权重路径和词表路径
CHECKPOINT="./model_weights/qwen15-4b-hf-v0.1-tp1-pp2"
TOKENIZER_PATH="./model_from_hf/qwen15-4b-hf/"
启动Qwen1.5-4B 推理脚本
bash examples/qwen15/generate_qwen15_4b_ptd.sh
推理示例如下:
使用 MMLU数据集评估模型. 数据集下载路径 这里. 配置Qwen1.5-4B 评估脚本: examples/qwen1.5/evaluate_qwen1.5_4b_ptd.sh
# ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型参数路径和词表路径
TOKENIZER_PATH="./model_from_hf/qwen15-4b-hf/" #词表路径
CHECKPOINT="./model_weights/qwen15-4b-hf-v0.1-tp1-pp2" #模型路径
# 配置任务和数据集路径
DATA_PATH="./mmlu/data/test/"
TASK="mmlu"
启动评估
bash examples/qwen15/evaluate_qwen15_4b_ptd.sh
评估结果如下
数据集 | 总学科数 | 总问题数 | 参考准确率 | NPU准确率 |
---|---|---|---|---|
MMLU | 57 | 14042 | 0.561 | 0.550 |
Qwen1.5-7B 训练的硬件配置:
硬件 | 配置 |
---|---|
NPU | 8 x Ascend NPUs |
克隆仓库到本地服务器
git clone https://gitee.com/ascend/ModelLink.git
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
git checkout -f bcce6f
cp -r megatron ../ModelLink/
cd ..
cd ModelLink
mkdir logs
mkdir model_from_hf
mkdir dataset
mkdir ckpt
搭建环境
# python3.8
conda create -n test python=3.8
conda activate test
# 安装 torch 和 torch_npu
pip install torch-2.2.0-cp38-cp38m-manylinux2014_aarch64.whl
pip install torch_npu-2.2.0*-cp38-cp38m-linux_aarch64.whl
pip install apex-0.1_ascend*-cp38-cp38m-linux_aarch64.whl
# 安装加速库
git clone https://gitee.com/ascend/AscendSpeed.git
cd AscendSpeed
git checkout 224ae35e8fc96778f957029d1371ddb623452a50
pip install -r requirements.txt
pip install -e .
cd ..
# 安装其余依赖库
pip install -r requirements.txt
下载 Qwen1.5-7B 的 预训练权重和词表
mkdir ./model_from_hf/Qwen1.5-7B/
cd ./model_from_hf/Qwen1.5-7B/
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/config.json
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/generation_config.json
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/merges.txt
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/model-00001-of-00004.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/model-00002-of-00004.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/model-00003-of-00004.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/model-00004-of-00004.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/model.safetensors.index.json
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/special_tokens_map.json
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/tokenizer.json
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/tokenizer_config.json
wget https://huggingface.co/Qwen/Qwen1.5-7B/resolve/main/vocab.json
cd ../../
权重转换
将权重从 huggingface 格式转化为 megatron 格式 (该场景一般用于使能开源的HuggingFace模型在Megatron上进行训练)
# 修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader llama2_hf \
--saver megatron \
--target-tensor-parallel-size 8 \
--target-pipeline-parallel-size 1 \
--make-vocab-size-divisible-by 16 \
--load-dir ./model_from_hf/Qwen1.5-7B/ \
--save-dir ./model_weights/DA-v0.1-tp8-pp1/ \
--tokenizer-model ./model_from_hf/Qwen1.5-7B/tokenizer.json \
--add-qkv-bias \
--params-dtype bf16
任意并行切分策略的Megatron权重 格式转化为 HuggingFace权重 (该场景一般用于将训练好的megatron模型重新转回HuggingFace格式)
# 请按照您的真实环境修改 set_env.sh 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader megatron \
--saver megatron \
--save-model-type save_huggingface_qwen \
--target-tensor-parallel-size 1 \
--target-pipeline-parallel-size 1 \
--add-qkv-bias \
--load-dir ./model_weights/Qwen1.5-7B-v0.1-tp8-pp1 \
--save-dir ./model_from_hf/Qwen1.5-7B # 需要填入原始HF模型路径,新权重会存于./model_from_hf/Qwen1.5-7B/mg2hg/
预训练
5.1 准备数据集
下载Qwen1.5-7B 数据集
# 下载数据
cd ./dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理数据
mkdir ./dataset/Qwen1.5-7B/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/Qwen1.5-7B \
--output-prefix ./dataset/Qwen1.5-7B/alpaca \
--tokenizer-type PretrainedFromHF \
--seq-length 8192 \
--workers 4 \
--log-interval 1000
5.2 预训练
配置Qwen1.5-7B 预训练脚本: examples/qwen15/pretrain_qwen15_7b_ptd.sh
# 设置 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 根据实际情况配置词表、数据集、模型参数保存路径
CKPT_SAVE_DIR="./ckpt/Qwen1.5-7B"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-7B" #词表路径
DATA_PATH="./dataset/Qwen1.5-7B/alpaca_text_document" #数据集路径
CKPT_LOAD_DIR="./model_weights/Qwen1.5-7B-v0.1-tp8-pp1"
多机运行增加参数 --overlap-grad-reduce
。
启动 Qwen1.5-7B 预训练脚本: examples/qwen15/pretrain_qwen15_7b_ptd.sh
bash examples/qwen15/pretrain_qwen15_7b_ptd.sh
微调
6.1 准备微调数据集
下载微调数据集 这里
# 下载数据集
mkdir finetune_dataset
cd ./finetune_dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理微调数据集
mkdir ./finetune_dataset/Qwen1.5-7B/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/Qwen1.5-7B/ \
--output-prefix ./finetune_dataset/Qwen1.5-7B/alpaca \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF \
--handler-name GeneralInstructionHandler \
--append-eod
6.2 全参微调 全参微调的配置脚本基本和预训练脚本一致。
区别是数据集,以及增加训练参数--is-instruction-dataset
,增加微调参数--finetune
,增加预训练权重加载参数--load
,使微调从第一步开始。
修改如下:
CKPT_LOAD_DIR="./model_weights/Qwen1.5-7B-v0.1-tp8-pp1/"
CKPT_SAVE_DIR="./ckpt/Qwen1.5-7B/"
DATA_PATH="./finetune_dataset/Qwen1.5-7B/alpaca"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-7B/"
--load ${CKPT_LOAD_DIR} \
--finetune \
--is-instruction-dataset \
--tokenizer-not-use-fast \
Qwen1.5-7B 在 昇腾芯片 和 参考芯片 上的性能对比:
设备 | 模型 | tokens吞吐 (tokens/s/p) |
---|---|---|
NPUs | Qwen1.5-7B | 2862 |
参考 | Qwen1.5-7B | 2621 |
配置 Qwen1.5-7B 推理脚本:examples/qwen15/generate_qwen15_7b_ptd.sh
# ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型权重路径和词表路径
CHECKPOINT="./model_weights/Qwen1.5-7B-v0.1-tp8-pp1"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-7B"
启动Qwen1.5-7B推理脚本
bash examples/qwen15/generate_qwen15_7b_ptd.sh
推理示例如下:
配置Qwen1.5-7B评估脚本: examples/qwen15/evaluate_qwen15_7b_ptd.sh
# ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型参数路径和词表路径
TOKENIZER_PATH="./model_from_hf/Qwen1.5-7B/" #词表路径
CHECKPOINT="./model_weights/Qwen1.5-7B-v0.1-tp8-pp1/" #模型路径
# 配置任务和数据集路径
DATA_PATH="./mmlu/data/test/" # ceval任务配置为 "./ceval/val/"
TASK="mmlu" # ceval任务配置为 "ceval"
启动评估
bash examples/qwen15/evaluate_qwen15_7b_ptd.sh
数据集 | 总学科数 | 总问题数 | 参考准确率 | NPU准确率 |
---|---|---|---|---|
MMLU | 57 | 14042 | 61.0 | 60.3 |
Qwen1.5-14B 训练的硬件配置:
硬件 | 配置 |
---|---|
NPU | 8 x Ascend NPUs |
克隆仓库到本地服务器
git clone https://gitee.com/ascend/ModelLink.git
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
git checkout -f bcce6f
cp -r megatron ../ModelLink/
cd ..
cd ModelLink
mkdir logs
mkdir model_from_hf
mkdir dataset
mkdir ckpt
搭建环境
# python3.8
conda create -n test python=3.8
conda activate test
# 安装 torch 和 torch_npu
pip install torch-2.2.0-cp38-cp38m-manylinux2014_aarch64.whl
pip install torch_npu-2.2.0*-cp38-cp38m-linux_aarch64.whl
pip install apex-0.1_ascend*-cp38-cp38m-linux_aarch64.whl
# 安装加速库
git clone https://gitee.com/ascend/AscendSpeed.git
cd AscendSpeed
git checkout 224ae35e8fc96778f957029d1371ddb623452a50
pip install -r requirements.txt
pip install -e .
cd ..
# 安装其余依赖库
pip install -r requirements.txt
下载 Qwen1.5-14B 的 预训练权重和词表
mkdir ./model_from_hf/Qwen1.5-14B/
cd ./model_from_hf/Qwen1.5-14B/
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/config.json
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/generation_config.json
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/merges.txt
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/model.safetensors.index.json
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/special_tokens_map.json
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/tokenizer.json
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/tokenizer_config.json
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/vocab.json
wget https://huggingface.co/Qwen/Qwen1.5-14B/blob/main/model-00001-of-00008.safetensors
...
cd ../../
权重转换
将权重从 huggingface 格式转化为 megatron 格式 (该场景一般用于使能开源的HuggingFace模型在Megatron上进行训练)
# 修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader llama2_hf \
--saver megatron \
--target-tensor-parallel-size 8 \
--target-pipeline-parallel-size 1 \
--make-vocab-size-divisible-by 16 \
--load-dir ./model_from_hf/Qwen1.5-14B/ \
--save-dir ./model_weights/Qwen1.5-14B-v0.1-tp8-pp1/ \
--tokenizer-model ./model_from_hf/Qwen1.5-14B/tokenizer.json \
--add-qkv-bias \
--params-dtype bf16
任意并行切分策略的Megatron权重 格式转化为 HuggingFace权重 (该场景一般用于将训练好的megatron模型重新转回HuggingFace格式)
# 请按照您的真实环境修改 set_env.sh 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader megatron \
--saver megatron \
--save-model-type save_huggingface_qwen \
--target-tensor-parallel-size 1 \
--target-pipeline-parallel-size 1 \
--add-qkv-bias \
--load-dir ./model_weights/Qwen1.5-14B-v0.1-tp8-pp1 \
--save-dir ./model_from_hf/Qwen1.5-14B # 需要填入原始HF模型路径,新权重会存于./model_from_hf/Qwen1.5-14B/mg2hg/
预训练
5.1 准备数据集
下载Qwen1.5-14B 数据集
# 下载数据
cd ./dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理数据
mkdir ./dataset/Qwen1.5-14B/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/Qwen1.5-14B \
--output-prefix ./dataset/Qwen1.5-14B/alpaca \
--tokenizer-type PretrainedFromHF \
--seq-length 8192 \
--workers 4 \
--log-interval 1000
5.2 预训练
配置Qwen1.5-14B 预训练脚本: examples/qwen15/pretrain_qwen15_14b_ptd.sh
# 设置 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 根据实际情况配置词表、数据集、模型参数保存路径
CKPT_SAVE_DIR="./ckpt/Qwen1.5-14B"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-14B" #词表路径
DATA_PATH="./dataset/Qwen1.5-14B/alpaca_text_document" #数据集路径
CKPT_LOAD_DIR="./model_weights/Qwen1.5-14B-v0.1-tp8-pp1"
多机运行增加参数 --overlap-grad-reduce
。
启动 Qwen1.5-14B 预训练脚本: examples/qwen15/pretrain_qwen15_14b_ptd.sh
bash examples/qwen15/pretrain_qwen15_14b_ptd.sh
微调
6.1 准备微调数据集
下载微调数据集 这里
# 下载数据集
mkdir finetune_dataset
cd ./finetune_dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理微调数据集
mkdir ./finetune_dataset/Qwen1.5-14B/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/Qwen1.5-14B/ \
--output-prefix ./finetune_dataset/Qwen1.5-14B/alpaca \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF \
--handler-name GeneralInstructionHandler \
--append-eod
6.2 全参微调 全参微调的配置脚本基本和预训练脚本一致。
区别是数据集,以及增加训练参数--is-instruction-dataset
,增加微调参数--finetune
,增加预训练权重加载参数--load
,使微调从第一步开始}`。
修改如下:
CKPT_LOAD_DIR="./model_weights/Qwen1.5-14B-v0.1-tp8-pp1/"
CKPT_SAVE_DIR="./ckpt/Qwen1.5-14B/"
DATA_PATH="./finetune_dataset/Qwen1.5-14B/alpaca"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-14B/"
--load ${CKPT_LOAD_DIR} \
--finetune \
--is-instruction-dataset \
--tokenizer-not-use-fast \
Qwen1.5-14B 在 昇腾芯片 和 参考芯片 上的性能对比:
设备 | 模型 | tokens吞吐 (tokens/s/p) |
---|---|---|
NPUs | Qwen1.5-14B | 1717.8 |
参考 | Qwen1.5-14B | 1702.2 |
配置 Qwen1.5-14B 推理脚本:examples/qwen15/generate_qwen15_14b_ptd.sh
# ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型权重路径和词表路径
CHECKPOINT="./model_weights/Qwen1.5-14B-v0.1-tp8-pp1"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-14B"
启动Qwen1.5-14B推理脚本
bash examples/qwen15/generate_qwen15_14b_ptd.sh
推理示例如下:
配置Qwen1.5-14B评估脚本: examples/qwen15/evaluate_qwen15_14b_ptd.sh
# ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型参数路径和词表路径
TOKENIZER_PATH="./model_from_hf/Qwen1.5-14B/" #词表路径
CHECKPOINT="./model_weights/Qwen1.5-14B-v0.1-tp8-pp1/" #模型路径
# 配置任务和数据集路径
DATA_PATH="./mmlu/data/test/" # ceval任务配置为 "./ceval/val/"
TASK="mmlu" # ceval任务配置为 "ceval"
启动评估
bash examples/qwen15/evaluate_qwen15_14b_ptd.sh
数据集 | 总学科数 | 总问题数 | 参考准确率 | NPU准确率 |
---|---|---|---|---|
MMLU | 57 | 14042 | 67.6 | 67.3 |
硬件 | 序列长度 | 配置 |
---|---|---|
NPU | 8k | 32 x Ascend NPUs |
克隆仓库到本地服务器
git clone https://gitee.com/ascend/ModelLink.git
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
git checkout -f bcce6f
cp -r megatron ../ModelLink/
cd ..
cd ModelLink
mkdir logs
mkdir model_from_hf
mkdir dataset
mkdir ckpt
搭建环境
# python3.8
conda create -n test python=3.8
conda activate test
# 安装 torch 和 torch_npu
pip install torch-2.2.0-cp38-cp38m-manylinux2014_aarch64.whl
pip install torch_npu-2.2.0*-cp38-cp38m-linux_aarch64.whl
pip install apex-0.1_ascend*-cp38-cp38m-linux_aarch64.whl
# 修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 安装加速库
git clone https://gitee.com/ascend/AscendSpeed.git
cd AscendSpeed
git checkout 224ae35e8fc96778f957029d1371ddb623452a50
pip install -r requirements.txt
pip3 install -e .
cd ..
# 安装其余依赖库
pip install -r requirements.txt
注意:transformers版本要4.37.0以上
下载 Qwen1.5-32B 的 预训练权重和词表
mkdir ./model_from_hf/Qwen1.5-32B/
cd ./model_from_hf/Qwen1.5-32B/
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/config.json
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/generation_config.json
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/merges.txt
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00001-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00002-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00003-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00004-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00005-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00006-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00007-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00008-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00009-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00010-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00011-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00012-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00013-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00014-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00015-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00016-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model-00017-of-00017.safetensors
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/model.safetensors.index.json
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/tokenizer.json
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/tokenizer_config.json
wget https://huggingface.co/Qwen/Qwen1.5-32B/blob/main/vocab.json
cd ../../
权重转换
4.1 将权重从 huggingface 格式转化为 megatron 格式 (该场景一般用于使能开源的HuggingFace模型在Megatron上进行训练)
# 修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader llama2_hf \
--saver megatron \
--target-tensor-parallel-size 8 \
--target-pipeline-parallel-size 4 \
--num-layers-per-virtual-pipeline-stage 2 \
--params-dtype bf16 \
--load-dir ./model_from_hf/Qwen1.5-32B/ \
--save-dir ./model_weights/Qwen1.5-32B-v0.1-tp8-pp4-vpp2/ \
--tokenizer-model ./model_from_hf/Qwen1.5-32B/tokenizer.json \
--add-qkv-bias
4.2 任意并行切分策略的Megatron权重 格式转化为 HuggingFace权重 (该场景一般用于将训练好的megatron模型重新转回HuggingFace格式)
# 请按照您的真实环境修改 set_env.sh 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python tools/checkpoint/convert_ckpt.py \
--model-type GPT \
--loader megatron \
--saver megatron \
--save-model-type save_huggingface_llama \
--target-tensor-parallel-size 1 \
--target-pipeline-parallel-size 1 \
--num-layers-per-virtual-pipeline-stage 2 \
--add-qkv-bias \
--save-dir ./model_from_hf/Qwen1.5-32B/ # 需要填入原始HF模型路径,新权重会存于./model_from_hf/Qwen1.5-32B/mg2hg/
权重转换适用于预训练、微调、推理和评估,根据任务不同调整参数 target-tensor-parallel-size
和 target-pipeline-parallel-size
。
预训练
5.1 准备数据集 下载 Qwen1.5-32B 数据集
# 下载数据
cd ./dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理数据
mkdir ./dataset/qwen-1.5-32b-hf/
python ./tools/preprocess_data.py \
--input ./dataset/train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/Qwen1.5-32B/ \
--output-prefix ./dataset/qwen-1.5-32b-hf/alpaca \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF
5.2 预训练
# 设置 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 根据实际情况配置词表、数据集、模型参数保存路径
CKPT_SAVE_DIR="./ckpt/Qwen1.5-32B/"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-32B/" #词表路径
DATA_PATH="./dataset/Qwen1.5-32B/alpaca_text_document" #数据集路径
CKPT_LOAD_DIR="./model_weights/Qwen1.5-32B-v0.1-tp8-pp4-vpp2/"
启动 Qwen1.5-32B 预训练脚本: examples/qwen15/pretrain_qwen15_32b_ptd.sh
bash examples/qwen15/pretrain_qwen15_32b_ptd.sh
注意:如果使用多机训练,且没有设置数据共享,需要在训练启动脚本中增加--no-shared-storage
参数,设置此参数之后将会根据分布式参数判断非主节点是否需要load数据,并检查相应缓存和生成数据。
微调 6.1 准备微调数据集 下载微调数据集 这里
# 下载数据集
mkdir finetune_dataset
cd ./finetune_dataset
wget https://huggingface.co/datasets/tatsu-lab/alpaca/resolve/main/data/train-00000-of-00001-a09b74b3ef9c3b56.parquet
cd ..
# 处理微调数据集
mkdir ./finetune_dataset/qwen-1.5-32b-hf/
python ./tools/preprocess_data.py \
--input ./dataset/ train-00000-of-00001-a09b74b3ef9c3b56.parquet \
--tokenizer-name-or-path ./model_from_hf/Qwen1.5-32B/ \
--output-prefix ./finetune_dataset/qwen-1.5-32b-hf/alpaca \
--workers 4 \
--log-interval 1000 \
--tokenizer-type PretrainedFromHF \
--handler-name GeneralInstructionHandler \
--append-eod
6.2 全参微调
全参微调的配置脚本基本和预训练脚本一致. 区别是数据集,以及增加训练参数--is-instruction-dataset
增加微调参数--finetune,增加预训练权重加载参数--load,使微调从第一步开始。更改为以下参数:
DATA_PATH="./finetune_dataset/qwen-1.5-32b-hf/alpaca"
TOKENIZER_PATH="./model_from_hf/Qwen1.5-32B/"
CKPT_PATH="./ckpt/Qwen1.5-32B/"
--load ${CKPT_PATH} \
--finetune \
--is-instruction-dataset \
--tokenizer-not-use-fast \
6.3 Lora微调
Lora微调的脚本配置是在全参微调脚本基础上加上lora参数,如下所示:
--lora-target-modules query_key_value dense dense_h_to_4h dense_4h_to_h \
--lora-r 16 \
--lora-alpha 32 \
如果模型的词表变化了,可以加上以下参数(词表不变不建议添加)
--lora-modules-to-save word_embeddings output_layer \
启动qwen1.5-32B Lora微调脚本: examples/qwen15/tune_qwen15_32b_ptd.sh
bash examples/qwen15/tune_qwen15_32b_ptd.sh
Qwen1.5-32B 在 昇腾芯片 和 参考芯片 上的性能对比:
设备 | 模型 | tokens吞吐 (tokens/s/p)(8k序列) |
---|---|---|
NPUs | Qwen1.5-32B | 751.2 |
参考 | Qwen1.5-32B | 709.2 |
配置 qwen1.5-32b 推理脚本:examples/qwen15/generate_qwen15_32b_ptd.sh
# ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型权重路径和词表路径
CHECKPOINT="./model_weights/Qwen1.5-32B-v0.1-tp8-pp1/"
TOKENIZER_PATH="/model_from_hf/Qwen1.5-32B/"
启动qwen1.5-32b推理脚本
bash examples/qwen15/generate_qwen15_32b_ptd.sh
推理示例如下:
配置 Qwen1.5-32B lora推理脚本: examples/qwen15/generate_qwen15_32b_lora_chat_ptd.sh
# 修改lora权重路径
CHECKPOINT_LORA="your lora model directory path"
Qwen1.5-32B启动lora推理:
bash ./examples/qwen15/generate_qwen15_32b_lora_chat_ptd.sh
lora微调后的推理效果如下:
使用MMLU数据集评估模型.
配置qwen1.5-32b评估脚本: examples/qwen15/evaluate_qwen15_32b_ptd.sh
# ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 修改模型参数路径和词表路径
TOKENIZER_PATH="./model_from_hf/Qwen1.5-32B/" # 词表路径
CHECKPOINT="./model_weights/Qwen1.5-32B-v0.1-tp8-pp1/" # 模型路径
# 配置任务和数据集路径
DATA_PATH="./mmlu/data/test/" # ceval任务配置为 "./ceval/val/"
TASK="mmlu" # ceval任务配置为 "ceval"
启动评估
bash examples/qwen15/evaluate_qwen15_32b_ptd.sh
数据集 | 总学科数 | 总问题数 | 参考准确率 | NPU准确率 |
---|---|---|---|---|
MMLU | 57 | 14042 | 73.4 | 72.6 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。